﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MakeIT.MiraPark.Negocios;

namespace MiraPark
{
    public partial class FormRetiradaProvisaoCaixa : Form
    {
        CabineVO cabineVO = null;
        UsuarioVO usuarioVO = null;
        
        public FormRetiradaProvisaoCaixa()
        {
            InitializeComponent();
        }
        public void setCabine(CabineVO cabineVO, UsuarioVO usuarioVO)
        {
            this.cabineVO = cabineVO;
            this.usuarioVO = usuarioVO;
        }


        
        private void FormCabineFinanceiro_Load(object sender, EventArgs e)
        {
        }

        private void buttonLancar_Click(object sender, EventArgs e)
        {
            
            StringBuilder mensagem = new StringBuilder();

            if (this.numericUpDownCredito.Value + this.numericUpDownDebito.Value == 0)
            {
                mensagem.AppendLine("Crédito e/ou Débito devem ser informados.");
            }
            if (mensagem.ToString().Length > 0)
            {
                MessageBox.Show(mensagem.ToString(), "Aviso");
                return;
            }

            DialogResult dr = MessageBox.Show(this, "Confirma o lançamento de movimento?", "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr.ToString().Equals("No"))
            {
                return;
            }
            
            DateTime dtRef = DateTime.Now;


            mensagem.Append(Ticket.getHeader());
            mensagem.AppendLine(dtRef.ToString());
            mensagem.AppendLine("Movimento Financeiro de Caixa");
            mensagem.AppendLine("================================================");
            mensagem.AppendLine("Patio: " + cabineVO.idPatio + " - " + cabineVO.patioVO.patio);
            mensagem.AppendLine("Cabine: " + cabineVO.idCabine + " - " + cabineVO.cabine);
            mensagem.AppendLine("Operador:" + "x-xxxx");
            mensagem.AppendLine("================================================");
            mensagem.AppendLine("");

            
            if (this.numericUpDownCredito.Value > 0)
            {
                MovimentacaoVO movimentacaoVO = MovimentacaoVO.CreateMovimentacaoVO();
                movimentacaoVO.entrada = dtRef;
                movimentacaoVO.especie = MovimentacaoVO.Especie.Provisao;
                movimentacaoVO.fechCabine = false;
                movimentacaoVO.fechConvenio = false;
                movimentacaoVO.fechDiario = false;
                movimentacaoVO.idCabineE = cabineVO.idCabine;
                movimentacaoVO.idCabineS = cabineVO.idCabine;
                movimentacaoVO.idMensalista = -1;
                movimentacaoVO.idConvenio = -1;
                movimentacaoVO.obs = "";
                movimentacaoVO.placa = "";
                movimentacaoVO.saida = dtRef;
                movimentacaoVO.ticket = -1;
                movimentacaoVO.valor = this.numericUpDownCredito.Value;

                ModelBO.newMovimentacao(movimentacaoVO);

                mensagem.AppendLine("Provisao:" + this.numericUpDownCredito.Value.ToString("N"));

            }
            
            if (this.numericUpDownDebito.Value > 0)
            {
                MovimentacaoVO movimentacaoVO = MovimentacaoVO.CreateMovimentacaoVO();
                movimentacaoVO.entrada = dtRef;
                movimentacaoVO.especie = MovimentacaoVO.Especie.Retirada;
                movimentacaoVO.fechCabine = false;
                movimentacaoVO.fechConvenio = false;
                movimentacaoVO.fechDiario = false;
                movimentacaoVO.idCabineE = cabineVO.idCabine;
                movimentacaoVO.idCabineS = cabineVO.idCabine;
                movimentacaoVO.idMensalista = -1;
                movimentacaoVO.idConvenio = -1;
                movimentacaoVO.obs = "";
                movimentacaoVO.placa = "";
                movimentacaoVO.saida = dtRef;
                movimentacaoVO.ticket = -1;
                movimentacaoVO.valor = this.numericUpDownDebito.Value * -1;

                ModelBO.newMovimentacao(movimentacaoVO);

                mensagem.AppendLine("Retirada:" + this.numericUpDownDebito.Value.ToString("N"));
            }

            mensagem.Append(Ticket.getFooter(false,cabineVO, usuarioVO));

            this.textBoxResult.Text = mensagem.ToString();

            this.numericUpDownCredito.Enabled = false;
            this.numericUpDownDebito.Enabled = false;
            this.buttonLancar.Enabled = false;

        }

        private void buttonFecharJanela_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void buttonImprimir_Click(object sender, EventArgs e)
        {
            while (true)
            {
                if (!Ticket.checkPrint() || !Ticket.printTicket(this.textBoxResult.Text))
                {
                    DialogResult dr = MessageBox.Show(this, "Tentar novamente?", "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dr.ToString().Equals("Yes"))
                    {
                        continue;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }

        }
    }
}
